<?php
/**
 * alltosun.com 微博表情解析等操作widget emotion.php
 * ============================================================================
 * 版权所有 (C) 2009-2012 北京互动阳光科技有限公司，并保留所有权利。
 * 网站地址:   http://www.alltosun.com
 * ----------------------------------------------------------------------------
 * 许可声明：这是一个开源程序，未经许可不得将本软件的整体或任何部分用于商业用途及再发布。
 * ============================================================================
 * $Author: 李维 (liw@alltosun.com) $
 * $Date: 2013-1-22 下午3:35:41 $
 * $Id$
*/

class emotion_widget
{
    // 表情数据
    private static $data = null;
    // 匹配出的url缓存
    private static $phrase_imgs = array();


    /**
     * 解析微博表情
     * @param {string} $content
     * @param {int} $site_id 默认新浪微博
     * @return {string}
     */
    public function parse( $content = '', $site_id = 1 )
    {
        if (!$content) {
            return '';
        }

        $reg = emotion_config::$reg;

        if ( preg_match_all( $reg, $content, $matches ) ) {
            foreach ($matches[1] as $k=>$v) {
                $img = $this->get_img_by_phrase($v, $site_id);
                if ($img) {
                    $content = str_replace( $v, $img, $content );
                }
            }
        }
        return $content;
    }

    /**
     * 从接口更新表情到数据库需要登录用户且授权未过期
     */
    public function update()
    {
        exit('bad request.');
        $user_id = user_helper::get_user_id();
        if (!$user_id) {
            return '没有当前登录用户';
        }
        try {
            $ori_emotions = AnSinaWeibo::emotions();
            if ($ori_emotions) {
                $emotions = array();
                $category_titles = array();
                foreach ($ori_emotions as $k=>$emotion) {
                    $category_title = $emotion['category'] ? $emotion['category'] : '默认';
                    if (!in_array($category_title, $category_titles, true)) {
                        $category_id = (array_push($category_titles, $category_title)) - 1;
                        $emotions[$category_id] = array();
                    }
                    array_push($emotions[$category_id], $emotion);
                }
                $update_arr = array(
                        'category_list' => $category_titles,
                        'emotions'      => $emotions
                );
                _model('emotion')->create(array('site_id'=>1, 'content'=>json_encode($update_arr)), 'REPLACE');
            } else {
                return '从微博获取表情失败';
            }
        } catch (Exception $e) {
            if (ANPOWER) {
                var_dump($e);
                return 'error';
            }
        }
        return 'ok';
    }

    /**
     * 从数据库获取表情数据
     * @param {Int} $site_id 表情网站id 默认1 新浪微博
     */
    public function get( $site_id = 1 )
    {
        return emotion_config::$weixin_emotions;
    }

    /**
     * 根据文本获取imghtml标签
     * @param {string} $phrase 诸如 [高兴] ...
     * @return {string}
     */
    public function get_img_by_phrase( $phrase = '', $site_id = 1 )
    {
        if (!$phrase) {
            return '';
        }

        // 内存
        if (isset(self::$phrase_imgs[$phrase])) {
            return self::$phrase_imgs[$phrase];
        }
        if (self::$data === null) {
            self::$data = json_decode( $this->get($site_id), true );
            if (!self::$data) {
                throw new Exception( '在解析表情时没有获取到数据' );
            }
        }

        //遍历
        foreach ( self::$data['emotions'] as $k=>$emotion ) {
            foreach ($emotion as $k1=>$face) {
                if ($face['phrase'] == $phrase) {
                    self::$phrase_imgs[$phrase] = '<img src="'.$face['url'].'" />';
                    return self::$phrase_imgs[$phrase];
                }
            }
        }

        // 没有则设置为空
        self::$phrase_imgs[$phrase] = '';
        return self::$phrase_imgs[$phrase];
    }
}
?>